Let's Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。
简单的说,借助 Let's Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。

我这里直接使用第三方客户端 acme.sh 申请,官方推荐 Certbot 客户端来签发证书,在尝试了 Certbotacme.sh 后,推荐使用 acme.sh

安装acme

1
curl https://get.acme.sh | sh

获取证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: httpdns 验证,如若允许建议使用 dns 验证,http 验证在此不再赘述,如有需要点击传送门dns 验证强大之处在于,可以自动配置DNS,不用去域名后台操作解析记录了,我的域名是在阿里注册的,下面给出阿里云解析的例子,其他地方注册的请参考这里自行修改: 传送门

请先前往阿里云后台获取 App_KeyApp_Secret 传送门

设置 key

1
2
3
# 替换成从阿里云后台获取的密钥
export Ali_Key="Ali_Key"
export Ali_Secret="Ali_Secret"

获取证书

1
2
3
4
5
# 泛域名获取
# 泛域名获取时,根域名(wurenstudio.cn)如果也想使用泛域名证书的话,则必须获取根域名证书,如下
acme.sh --issue --dns dns_ali -d wurenstudio.cn -d *.wurenstudio.cn
# 单域名获取
acme.sh --issue --dns dns_ali -d wurenstudio.cn

第一次获取证书会进行dns验证,期间需要等待20s,等待后则可生成成功。

配置证书

证书文件介绍:

1
2
3
4
.key 是证书私钥文件
.pem 是证书文件 Nginx 服务器,在阿里云证书中与.crt文件一样
.crt 是证书文件 Apache 服务器 _public.crt(证书)_chain.crt(证书链或中间证书)
.pfx 一般适合Tomcat/IIS服务器,暂不介绍

参考地址:https://help.aliyun.com/knowledge_detail/95505.html?spm=5176.2020520163.cas.26.1d32VlfJVlfJ5b

Nginx/Tengine 服务器

打开Nginx安装目录下conf目录下的nginx.conf文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#以下属性中ssl开头的属性与证书配置有直接关系
#其它属性请结合自己的实际情况复制或调整
server {
listen 443;
server_name localhost;
ssl on;
root html;
index index.html index.htm;
# 证书公钥配置
ssl_certificate cert/fullchain.pem;
# 证书私钥配置
ssl_certificate_key cert/privkey.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}

Apache 服务器

打开apache安装目录下conf目录中的httpd.conf文件,找到以下内容去掉注释:

1
2
3
LoadModule ssl_module modules/mod_ssl.so
#(如果找不到请确认是否编译过 openssl 插件)
Include conf/extra/httpd-ssl.conf

打开apache安装目录下conf.d/ssl.conf,在配置文件中查找以下配置语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/fullchain.crt
# 证书私钥配置
SSLCertificateKeyFile cert/privkey.key
# 证书链配置
SSLCertificateChainFile cert/chain.crt

### 或者以下文件格式
SSLCertificateFile cert/fullchain.pem
SSLCertificateKeyFile cert/privkey.pem
SSLCertificateChainFile cert/chain.pem

PS:配置完成后都需要重启相关服务

自动续期

目前 Let's Encrypt 的证书有效期是 90 天,到期时 acme.sh 会自动续期,安装时就已经创建了 crontab 定时任务,无需任何操作。

也可以强制续签证书:

1
acme.sh --renew -d example.com --force